var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
 
app.get('/', function(req, res){ 
    res.send('<h1>Welcome Realtime Server</h1>'); 
}); 
 
//在线用户 
var onlineUsers = {}; 
//当前在线人数 
var onlineCount = 0; 
 
io.on('connection', function(socket){ 
    console.log('a user connected'); 
     
    //监听新用户加入 
    socket.on('login', function(obj){ 
        //将新加入用户的唯一标识当作socket的名称，后面退出的时候会用到 
        socket.name = obj.userid; 
         
        //检查在线列表，如果不在里面就加入 
        if(!onlineUsers.hasOwnProperty(obj.userid)) { 
            onlineUsers[obj.userid] = obj.username; 
            //在线人数+1 
            onlineCount++; 
        } 
         
        //向所有客户端广播用户加入 
        io.emit('login', {onlineUsers:onlineUsers, onlineCount:onlineCount, user:obj}); 
        console.log(obj.username+'加入了聊天室'); 
    }); 
     
    //监听用户退出 
    socket.on('disconnect', function(){ 
        //将退出的用户从在线列表中删除 
        if(onlineUsers.hasOwnProperty(socket.name)) { 
            //退出用户的信息 
            var obj = {userid:socket.name, username:onlineUsers[socket.name]}; 
             
            //删除 
            delete onlineUsers[socket.name]; 
            //在线人数-1 
            onlineCount--; 
             
            //向所有客户端广播用户退出 
            io.emit('logout', {onlineUsers:onlineUsers, onlineCount:onlineCount, user:obj}); 
            console.log(obj.username+'退出了聊天室'); 
        } 
    }); 
     
    //监听用户发布聊天内容 
    socket.on('message', function(obj){ 
        //向所有客户端广播发布的消息 
        io.emit('message', obj); 
        console.log(obj.username+'说：'+obj.content); 
    }); 
   
}); 
 
http.listen(3000, function(){ 
    console.log('listening on *:3000'); 
}); 
